/*
 * File:   TurtleState.h
 * Author: Thomas Trojer
 *
 * Created on 02. Juli 2010, 22:42
 */

#ifndef TURTLESTATE_H
#define	TURTLESTATE_H

#include "types/Stack.h"
#include "types/Vec4.h"
using mehari::common::Vec4f;

class TurtleState;
typedef Stack<TurtleState> TurtleStack;

class TurtleState {
public:
    TurtleState();
    TurtleState(const TurtleState& orig);
    virtual ~TurtleState();

    void setCode(const char c);
    const char getCode() const;

    void setPosition(Vec4f pos);
    const Vec4f* getPosition() const;

    void setDirection(Vec4f dir);
    const Vec4f* getDirection() const;

    void setUp(Vec4f up);
    const Vec4f* getUp() const;

    void addBranch(TurtleState& branchState);

private:
    char code;
    Vec4f position;
    Vec4f direction;
    Vec4f upwards;

    TurtleStack branch;
};

#endif	/* TURTLESTATE_H */

